Smoking and human health in west virginia.
map1:Distribution of smokers in west virginia.
library(rgdal)
wv <- readOGR(".","rdata")
OGR data source with driver: ESRI Shapefile
Source: ".", layer: "rdata"
with 55 features
It has 41 fields
df <- wv@data
df$smokers <- df$F__Smokers
library(tmap)
qtm(wv,fill = "F__Smokers")

MAP2:Years of potential life lost as a result of smoking.
###age adjusted rate YPLL per 100,000
qtm(wv,fill = "Years_of_P")

cor.test(df$F__Smokers,df$Years_of_P)
Pearson's product-moment correlation
data: df$F__Smokers and df$Years_of_P
t = 5.7644, df = 53, p-value = 4.281e-07
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.425557 0.760776
sample estimates:
cor
0.6207699
yearslost <- lm(df$Years_of_P~df$F__Smokers)
summary(yearslost)
Call:
lm(formula = df$Years_of_P ~ df$F__Smokers)
Residuals:
Min 1Q Median 3Q Max
-4548.2 -1202.4 -332.4 1209.5 5511.4
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -9359.8 3333.6 -2.808 0.00697 **
df$F__Smokers 814.2 141.2 5.764 4.28e-07 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1943 on 53 degrees of freedom
Multiple R-squared: 0.3854, Adjusted R-squared: 0.3738
F-statistic: 33.23 on 1 and 53 DF, p-value: 4.281e-07
plot(df$Years_of_P,df$F__Smokers)

print("Reject the null hypothesis.Therefore there is a strong positive correlation between smoking and no. of years of potential life lost.")
[1] "Reject the null hypothesis.Therefore there is a strong positive correlation between smoking and no. of years of potential life lost."
print("smoking explains 37.38 % of early mortality in smokers.")
[1] "smoking explains 37.38 % of early mortality in smokers."
map:3 smoking and low birthweight.
qtm(wv,fill = "Low_Birthw")

x<- df$F__Smokers
y <- df$F__LBW
plot(x,y)

print("there is a positive correlation between smoking and low birth weight.")
[1] "there is a positive correlation between smoking and low birth weight."
lbw <- lm(y~x)
summary(lbw)
Call:
lm(formula = y ~ x)
Residuals:
Min 1Q Median 3Q Max
-4.6399 -0.9224 -0.1083 0.9310 3.4069
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.8156 2.4796 0.732 0.46727
x 0.3128 0.1051 2.977 0.00438 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.445 on 53 degrees of freedom
Multiple R-squared: 0.1432, Adjusted R-squared: 0.1271
F-statistic: 8.861 on 1 and 53 DF, p-value: 0.004383
print("smoking explains 12.71% of all lowbirthweights in smokers.")
[1] "smoking explains 12.71% of all lowbirthweights in smokers."
map4:smoking and fair/poor health.
qtm(wv,fill = "F__Fair_Po")

poor.health <- lm(df$F__Fair_Po~df$F__Smokers)
summary(poor.health)
Call:
lm(formula = df$F__Fair_Po ~ df$F__Smokers)
Residuals:
Min 1Q Median 3Q Max
-4.5132 -0.9469 0.1661 0.9165 3.6962
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -2.444 2.926 -0.835 0.407
df$F__Smokers 1.054 0.124 8.504 1.77e-11 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.706 on 53 degrees of freedom
Multiple R-squared: 0.5771, Adjusted R-squared: 0.5691
F-statistic: 72.31 on 1 and 53 DF, p-value: 1.77e-11
plot(df$F__Fair_Po,df$F__Smokers)

print("there is a strong positive correlation between smoking and fair/poor health")
[1] "there is a strong positive correlation between smoking and fair/poor health"
print("smoking accounts for 56.91% of poor health in smokers.")
[1] "smoking accounts for 56.91% of poor health in smokers."
map5:smoking and physically unhealthy days.
qtm(wv,fill = "Physically")

cor.test(df$F__Smokers,df$Physically)
Pearson's product-moment correlation
data: df$F__Smokers and df$Physically
t = 7.803, df = 53, p-value = 2.312e-10
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.5780032 0.8345841
sample estimates:
cor
0.7311794
ph <- lm(df$Physically~df$F__Smokers)
summary(ph)
Call:
lm(formula = df$Physically ~ df$F__Smokers)
Residuals:
Min 1Q Median 3Q Max
-0.6976 -0.1841 -0.0047 0.1837 0.6342
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.16950 0.49022 2.386 0.0207 *
df$F__Smokers 0.16208 0.02077 7.803 2.31e-10 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.2857 on 53 degrees of freedom
Multiple R-squared: 0.5346, Adjusted R-squared: 0.5258
F-statistic: 60.89 on 1 and 53 DF, p-value: 2.312e-10
plot(df$Physically,df$F__Smokers)
abline(ph,col="red")
segments(df$F__Smokers,fitted(ph),df$F__Smokers,df$Physically,col="red",lty = "dashed")

print("There is a strong positive correlation between smoking and the no. of physically unhealthy days.")
[1] "There is a strong positive correlation between smoking and the no. of physically unhealthy days."
print("smoking explains 52.58% of all physically unhealthy days in smokers.")
[1] "smoking explains 52.58% of all physically unhealthy days in smokers."
map6: smoking and mammography tests.
qtm(wv,fill = "F__Mammogr")

y<- df$F__Mammogr
x <- df$F__Smokers
cor.test(df$F__Mammogr,df$F__Smokers)
Pearson's product-moment correlation
data: df$F__Mammogr and df$F__Smokers
t = -3.2492, df = 53, p-value = 0.002012
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.6072033 -0.1595093
sample estimates:
cor
-0.4075596
plot(x,y)
mammography <- lm(y~x)
summary(mammography)
Call:
lm(formula = y ~ x)
Residuals:
Min 1Q Median 3Q Max
-11.4618 -3.4095 0.0118 3.0098 12.3033
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 88.3637 9.2823 9.520 4.57e-13 ***
x -1.2779 0.3933 -3.249 0.00201 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 5.41 on 53 degrees of freedom
Multiple R-squared: 0.1661, Adjusted R-squared: 0.1504
F-statistic: 10.56 on 1 and 53 DF, p-value: 0.002012
abline(mammography,col="red")

print("There is a negative correlation between mammography tests and smoking.")
[1] "There is a negative correlation between mammography tests and smoking."
print("smoking explains 15.04% of all the mammography tests done on smokers.")
[1] "smoking explains 15.04% of all the mammography tests done on smokers."
map7:% of smokers in comparison to their employment status.
qtm(wv,fill="F__Unemplo")

y <- df$F__Unemplo
x <- df$F__Smokers
unemployment <- lm(y~x)
summary(unemployment)
Call:
lm(formula = y ~ x)
Residuals:
Min 1Q Median 3Q Max
-3.9409 -1.3685 -0.4637 1.3116 4.2788
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -5.3570 3.2020 -1.673 0.100212
x 0.5569 0.1357 4.104 0.000141 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.866 on 53 degrees of freedom
Multiple R-squared: 0.2412, Adjusted R-squared: 0.2269
F-statistic: 16.85 on 1 and 53 DF, p-value: 0.0001406
plot(y,x)

print("There is a strong positive correlation betwen smoking and unemployment.")
[1] "There is a strong positive correlation betwen smoking and unemployment."
print("Smoking explains 22.69% of all unempoyment status in smokers.")
[1] "Smoking explains 22.69% of all unempoyment status in smokers."
% of smokers in comparison to their education level.(The data for this graphs is from CDC,health department of west virginia state,summary statistics.)
library(plotly)
p <- plot_ly(
x = c("less high school", "high school grad", "some college","college grad"),
y = c(40, 28.2, 24.7,13.5),
name = "education",
type = "bar"
)
p
print("More education correlates with less smoking.")
[1] "More education correlates with less smoking."
% of smokers in comparison to their income levels.
library(plotly)
p <- plot_ly(
x = c("less $25000", "$25-$49,999", "$50-74,999","75000 & abv"),
y = c(38.7, 25.3, 18.9,14.3),
name = "income",
type = "bar"
)
p
print("High income correlates with less smoking.")
[1] "High income correlates with less smoking."
map 8:smoking and dentist rate visits.
qtm(wv,fill = "Dentist_Ra")

dental <- lm(df$Dentist_Ra~df$F__Smokers)
summary(dental)
Call:
lm(formula = df$Dentist_Ra ~ df$F__Smokers)
Residuals:
Min 1Q Median 3Q Max
-41.914 -14.236 -4.860 7.547 69.509
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 124.723 39.789 3.135 0.0028 **
df$F__Smokers -3.650 1.686 -2.165 0.0349 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 23.19 on 53 degrees of freedom
Multiple R-squared: 0.08127, Adjusted R-squared: 0.06393
F-statistic: 4.688 on 1 and 53 DF, p-value: 0.03489
plot(df$Dentist_Ra,df$F__Smokers)
abline(dental,col="red")

cor.test(df$Dentist_Ra,df$F__Smokers)
Pearson's product-moment correlation
data: df$Dentist_Ra and df$F__Smokers
t = -2.1652, df = 53, p-value = 0.03489
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.51167605 -0.02139816
sample estimates:
cor
-0.285077
t.crit <- qt(0.975,53)
t.crit
[1] 2.005746
print("very little negative correlation between dentist visit rates and smoking.")
[1] "very little negative correlation between dentist visit rates and smoking."
map9:smoking and mental health.
qtm(wv,fill = "Mental_Hea")

mental <- lm(df$Mental_Hea~df$F__Smokers)
summary(mental)
Call:
lm(formula = df$Mental_Hea ~ df$F__Smokers)
Residuals:
Min 1Q Median 3Q Max
-35.743 -31.670 -23.514 -3.381 257.947
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 64.096 104.291 0.615 0.541
df$F__Smokers -1.227 4.419 -0.278 0.782
Residual standard error: 60.79 on 53 degrees of freedom
Multiple R-squared: 0.001452, Adjusted R-squared: -0.01739
F-statistic: 0.07705 on 1 and 53 DF, p-value: 0.7824
plot(df$Mental_Hea,df$F__Smokers)

print("There is no correlation between smoking and mental health.")
[1] "There is no correlation between smoking and mental health."
LS0tDQp0aXRsZTogIkZpbmFsIHByb2plY3QiDQphdXRob3I6ICJOZ2FyZSBXaW5uaWUiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogICAgdG9jOiB5ZXMNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQotLS0NCg0KDQojI1Ntb2tpbmcgYW5kIGh1bWFuIGhlYWx0aCBpbiB3ZXN0IHZpcmdpbmlhLiANCiMjbWFwMTpEaXN0cmlidXRpb24gb2Ygc21va2VycyBpbiB3ZXN0IHZpcmdpbmlhLg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkocmdkYWwpDQp3diA8LSByZWFkT0dSKCIuIiwicmRhdGEiKQ0KDQpkZiA8LSB3dkBkYXRhDQpkZiRzbW9rZXJzIDwtIGRmJEZfX1Ntb2tlcnMNCmxpYnJhcnkodG1hcCkNCnF0bSh3dixmaWxsID0gIkZfX1Ntb2tlcnMiKQ0KDQoNCmBgYA0KDQoNCg0KDQoNCg0KIyNNQVAyOlllYXJzIG9mIHBvdGVudGlhbCBsaWZlIGxvc3QgYXMgYSByZXN1bHQgb2Ygc21va2luZy4NCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIyNhZ2UgYWRqdXN0ZWQgcmF0ZSBZUExMIHBlciAxMDAsMDAwIA0KDQpxdG0od3YsZmlsbCA9ICJZZWFyc19vZl9QIikNCmNvci50ZXN0KGRmJEZfX1Ntb2tlcnMsZGYkWWVhcnNfb2ZfUCkNCnllYXJzbG9zdCA8LSBsbShkZiRZZWFyc19vZl9QfmRmJEZfX1Ntb2tlcnMpDQpzdW1tYXJ5KHllYXJzbG9zdCkNCnBsb3QoZGYkWWVhcnNfb2ZfUCxkZiRGX19TbW9rZXJzKQ0KcHJpbnQoIlJlamVjdCB0aGUgbnVsbCBoeXBvdGhlc2lzLlRoZXJlZm9yZSB0aGVyZSBpcyBhIHN0cm9uZyBwb3NpdGl2ZSBjb3JyZWxhdGlvbiBiZXR3ZWVuIHNtb2tpbmcgYW5kIG5vLiBvZiB5ZWFycyBvZiBwb3RlbnRpYWwgbGlmZSBsb3N0LiIpDQpwcmludCgic21va2luZyBleHBsYWlucyAzNy4zOCAlIG9mIGVhcmx5IG1vcnRhbGl0eSBpbiBzbW9rZXJzLiIpDQpgYGANCg0KIyNtYXA6MyBzbW9raW5nIGFuZCBsb3cgYmlydGh3ZWlnaHQuDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KcXRtKHd2LGZpbGwgPSAiTG93X0JpcnRodyIpDQp4PC0gZGYkRl9fU21va2Vycw0KeSA8LSBkZiRGX19MQlcNCnBsb3QoeCx5KQ0KcHJpbnQoInRoZXJlIGlzIGEgcG9zaXRpdmUgY29ycmVsYXRpb24gYmV0d2VlbiBzbW9raW5nIGFuZCBsb3cgYmlydGggd2VpZ2h0LiIpDQpsYncgPC0gbG0oeX54KQ0Kc3VtbWFyeShsYncpDQpwcmludCgic21va2luZyBleHBsYWlucyAxMi43MSUgb2YgYWxsIGxvd2JpcnRod2VpZ2h0cyBpbiBzbW9rZXJzLiIpDQoNCmBgYA0KDQojI21hcDQ6c21va2luZyBhbmQgZmFpci9wb29yIGhlYWx0aC4NCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpxdG0od3YsZmlsbCA9ICJGX19GYWlyX1BvIikNCnBvb3IuaGVhbHRoIDwtIGxtKGRmJEZfX0ZhaXJfUG9+ZGYkRl9fU21va2VycykNCnN1bW1hcnkocG9vci5oZWFsdGgpDQoNCiBwbG90KGRmJEZfX0ZhaXJfUG8sZGYkRl9fU21va2VycykNCiBwcmludCgidGhlcmUgaXMgYSBzdHJvbmcgcG9zaXRpdmUgY29ycmVsYXRpb24gYmV0d2VlbiBzbW9raW5nIGFuZCBmYWlyL3Bvb3IgaGVhbHRoIikNCiBwcmludCgic21va2luZyBhY2NvdW50cyBmb3IgNTYuOTElIG9mIHBvb3IgaGVhbHRoIGluIHNtb2tlcnMuIikNCmBgYA0KDQoNCiMjbWFwNTpzbW9raW5nIGFuZCBwaHlzaWNhbGx5IHVuaGVhbHRoeSBkYXlzLg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCnF0bSh3dixmaWxsID0gIlBoeXNpY2FsbHkiKQ0KY29yLnRlc3QoZGYkRl9fU21va2VycyxkZiRQaHlzaWNhbGx5KQ0KcGggPC0gbG0oZGYkUGh5c2ljYWxseX5kZiRGX19TbW9rZXJzKQ0Kc3VtbWFyeShwaCkNCnBsb3QoZGYkUGh5c2ljYWxseSxkZiRGX19TbW9rZXJzKQ0KDQphYmxpbmUocGgsY29sPSJyZWQiKQ0Kc2VnbWVudHMoZGYkRl9fU21va2VycyxmaXR0ZWQocGgpLGRmJEZfX1Ntb2tlcnMsZGYkUGh5c2ljYWxseSxjb2w9InJlZCIsbHR5ID0gImRhc2hlZCIpDQpwcmludCgiVGhlcmUgaXMgYSBzdHJvbmcgcG9zaXRpdmUgY29ycmVsYXRpb24gYmV0d2VlbiBzbW9raW5nIGFuZCB0aGUgbm8uIG9mIHBoeXNpY2FsbHkgdW5oZWFsdGh5IGRheXMuIikNCnByaW50KCJzbW9raW5nIGV4cGxhaW5zIDUyLjU4JSBvZiBhbGwgcGh5c2ljYWxseSB1bmhlYWx0aHkgZGF5cyBpbiBzbW9rZXJzLiIpDQpgYGANCg0KIyMgbWFwNjogc21va2luZyBhbmQgbWFtbW9ncmFwaHkgdGVzdHMuDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KcXRtKHd2LGZpbGwgPSAiRl9fTWFtbW9nciIpDQp5PC0gZGYkRl9fTWFtbW9ncg0KeCA8LSBkZiRGX19TbW9rZXJzDQpjb3IudGVzdChkZiRGX19NYW1tb2dyLGRmJEZfX1Ntb2tlcnMpDQpwbG90KHgseSkNCm1hbW1vZ3JhcGh5IDwtIGxtKHl+eCkNCnN1bW1hcnkobWFtbW9ncmFwaHkpDQphYmxpbmUobWFtbW9ncmFwaHksY29sPSJyZWQiKQ0KcHJpbnQoIlRoZXJlIGlzIGEgbmVnYXRpdmUgY29ycmVsYXRpb24gYmV0d2VlbiBtYW1tb2dyYXBoeSB0ZXN0cyBhbmQgc21va2luZy4iKQ0KcHJpbnQoInNtb2tpbmcgZXhwbGFpbnMgMTUuMDQlIG9mIGFsbCB0aGUgbWFtbW9ncmFwaHkgdGVzdHMgZG9uZSBvbiBzbW9rZXJzLiIpDQpgYGANCg0KDQoNCg0KIyMgbWFwNzolIG9mIHNtb2tlcnMgaW4gY29tcGFyaXNvbiB0byB0aGVpciBlbXBsb3ltZW50IHN0YXR1cy4NCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpxdG0od3YsZmlsbD0iRl9fVW5lbXBsbyIpDQp5IDwtIGRmJEZfX1VuZW1wbG8NCnggPC0gZGYkRl9fU21va2Vycw0KdW5lbXBsb3ltZW50IDwtIGxtKHl+eCkNCnN1bW1hcnkodW5lbXBsb3ltZW50KQ0KcGxvdCh5LHgpDQpwcmludCgiVGhlcmUgaXMgYSBzdHJvbmcgcG9zaXRpdmUgY29ycmVsYXRpb24gYmV0d2VuIHNtb2tpbmcgYW5kIHVuZW1wbG95bWVudC4iKQ0KcHJpbnQoIlNtb2tpbmcgZXhwbGFpbnMgMjIuNjklIG9mIGFsbCB1bmVtcG95bWVudCBzdGF0dXMgaW4gc21va2Vycy4iKQ0KYGBgDQojIyAlIG9mIHNtb2tlcnMgaW4gY29tcGFyaXNvbiB0byB0aGVpciBlZHVjYXRpb24gbGV2ZWwuKFRoZSBkYXRhIGZvciB0aGlzIGdyYXBocyBpcyBmcm9tIENEQyxoZWFsdGggZGVwYXJ0bWVudCBvZiB3ZXN0IHZpcmdpbmlhIHN0YXRlLHN1bW1hcnkgc3RhdGlzdGljcy4pDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShwbG90bHkpDQoNCnAgPC0gcGxvdF9seSgNCiAgeCA9IGMoImxlc3MgaGlnaCBzY2hvb2wiLCAiaGlnaCBzY2hvb2wgZ3JhZCIsICJzb21lIGNvbGxlZ2UiLCJjb2xsZWdlIGdyYWQiKSwNCiAgeSA9IGMoNDAsIDI4LjIsIDI0LjcsMTMuNSksDQogIG5hbWUgPSAiZWR1Y2F0aW9uIiwNCiAgdHlwZSA9ICJiYXIiDQopDQpwDQpwcmludCgiTW9yZSBlZHVjYXRpb24gY29ycmVsYXRlcyB3aXRoIGxlc3Mgc21va2luZy4iKQ0KYGBgDQoNCg0KDQoNCiMjICUgb2Ygc21va2VycyBpbiBjb21wYXJpc29uIHRvIHRoZWlyIGluY29tZSBsZXZlbHMuDQpgYGB7ciBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShwbG90bHkpDQoNCnAgPC0gcGxvdF9seSgNCiAgeCA9IGMoImxlc3MgJDI1MDAwIiwgIiQyNS0kNDksOTk5IiwgIiQ1MC03NCw5OTkiLCI3NTAwMCAmIGFidiIpLA0KICB5ID0gYygzOC43LCAyNS4zLCAxOC45LDE0LjMpLA0KICBuYW1lID0gImluY29tZSIsDQogIHR5cGUgPSAiYmFyIg0KKQ0KcA0KcHJpbnQoIkhpZ2ggaW5jb21lIGNvcnJlbGF0ZXMgd2l0aCBsZXNzIHNtb2tpbmcuIikNCmBgYA0KDQoNCg0KIyMgbWFwIDg6c21va2luZyBhbmQgZGVudGlzdCByYXRlIHZpc2l0cy4NCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpxdG0od3YsZmlsbCA9ICJEZW50aXN0X1JhIikNCmRlbnRhbCA8LSBsbShkZiREZW50aXN0X1JhfmRmJEZfX1Ntb2tlcnMpDQpzdW1tYXJ5KGRlbnRhbCkNCnBsb3QoZGYkRGVudGlzdF9SYSxkZiRGX19TbW9rZXJzKQ0KYWJsaW5lKGRlbnRhbCxjb2w9InJlZCIpDQpjb3IudGVzdChkZiREZW50aXN0X1JhLGRmJEZfX1Ntb2tlcnMpDQp0LmNyaXQgPC0gcXQoMC45NzUsNTMpDQp0LmNyaXQNCnByaW50KCJ2ZXJ5IGxpdHRsZSBuZWdhdGl2ZSBjb3JyZWxhdGlvbiBiZXR3ZWVuIGRlbnRpc3QgdmlzaXQgcmF0ZXMgYW5kIHNtb2tpbmcuIikNCg0KYGBgDQoNCg0KDQojI21hcDk6c21va2luZyBhbmQgbWVudGFsIGhlYWx0aC4NCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQoNCnF0bSh3dixmaWxsID0gIk1lbnRhbF9IZWEiKQ0KbWVudGFsIDwtIGxtKGRmJE1lbnRhbF9IZWF+ZGYkRl9fU21va2VycykNCnN1bW1hcnkobWVudGFsKQ0KcGxvdChkZiRNZW50YWxfSGVhLGRmJEZfX1Ntb2tlcnMpDQpwcmludCgiVGhlcmUgaXMgbm8gY29ycmVsYXRpb24gYmV0d2VlbiBzbW9raW5nIGFuZCBtZW50YWwgaGVhbHRoLiIpDQoNCmBgYA0KDQoNCg0KDQoNCg0KDQoNCg0K